﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace NAVE_Alice_demo.Cena08.Cena.Camada
{
    /// <summary>
    /// /// Classe de camada
    /// </summary>
    class Camada2 : Camada
    {
        #region Variáveis
        /// <summary>
        /// Um objeto 'crocodilo' para acompanhar esta camada
        /// </summary>
        private Objeto.Crocodilo crocodilo;
        /// <summary>
        /// Um objeto 'sapo' para acompanhar esta camada
        /// </summary>
        private Objeto.Sapo sapo;

        private bool bln_podeClicarNoCrocodilo = true, bln_podeClicarNoSapo = true;
        #endregion

        #region Construtor
        /// <summary>
        /// Construtor da classe
        /// </summary>
        /// <param name="Content">Carregar recursos do content</param>
        public Camada2(ContentManager Content)
        {
            this.t2d_imagem = Content.Load<Texture2D>("Cena08//Cena//Camada2//Camada2");
            this.v2d_posicaoQuadroImagem = new Vector2(0, 0);
            this.v2d_tamanhoQuadroImagem = new Vector2(1024, 768); 
            this.flt_velocidadeParalaxeMaxima = 2;
            this.flt_velocidadeParalaxeAtual = 0;

            this.crocodilo = new Objeto.Crocodilo(Content);
            this.sapo = new Objeto.Sapo(Content);
        }

        #endregion

        #region Métodos
        /// <summary>
        /// Atualizar posição e métodos da camada
        /// </summary>
        /// <param name="gameTime">Tempo de jogo real</param>
        /// <param name="mouse">Estado do mouse</param>
        public override void Update(GameTime gameTime, MouseState mouse)
        {
            //Deixe que a classe pai faça o que a filha não precisa...
            base.Update(gameTime, mouse);

            //Atualize a posição do objeto 'crocodilo' com a velocidade atual sempre inversa, pois o crocodilo se move em direção contrária
            //do quadro de corte da imagem de fundo
            crocodilo.AtualizandoPosicao(flt_velocidadeParalaxeAtual * -1);

            //Atualize a posição do objeto 'sapo' com a velocidade atual sempre inversa, pois o sapo se move em direção contrária
            //do quadro de corte da imagem de fundo
            sapo.AtualizandoPosicao(flt_velocidadeParalaxeAtual * -1);

            //Se o objeto 'crocodilo' for clicado e puder ser clicado...
            if (crocodilo.Clicado(mouse) && bln_podeClicarNoCrocodilo)
                bln_podeClicarNoCrocodilo = false;

            //Se o objeto 'sapo' for clicado e puder ser clicado...
            if (sapo.Clicado(mouse) && bln_podeClicarNoSapo)
                bln_podeClicarNoSapo = false;

            //Se o crocodilo não pode ser clicado, é porque já foi e só poderá ser clicado quando a animação acabar...
            if (!bln_podeClicarNoCrocodilo)
            {
                crocodilo.Anime(gameTime);//... Anime
                //Se a animação acabar, permita o clique...
                if(crocodilo.bln_fimAnimacao)
                    bln_podeClicarNoCrocodilo = true;
            }

            //Se o sapo não pode ser clicado, é porque já foi e só poderá ser clicado quando a animação acabar...
            if (!bln_podeClicarNoSapo)
            {
                sapo.Anime(gameTime);//... Anime
                //Quando a animação acabar, permita o clique e abra a mensagem de confirmação de entrada no jogo...
                if (sapo.bln_fimAnimacao)
                {
                    _0Cena.estadoCenaAtual = _0Cena.EstadoCena.CONFIRMA_PUZZLE;
                    bln_podeClicarNoSapo = true;

                    //Mudar a variável de som ambiente da cena para falsa, para que caso o jogo retorne para cena, o som ambiente toque novamente
                    _0Cena.bln_somJaComecou = false;
                }
            }
        }

        /// <summary>
        /// Desenhe
        /// </summary>
        /// <param name="spriteBatch">Desenhar na tela de jogo</param>
        public override void Draw(SpriteBatch spriteBatch)
        {
            //Deixe que a classe pai faça o que a filha não precisa...
            base.Draw(spriteBatch);

            //Desenhe o objeto 'crocodilo'
            crocodilo.Draw(spriteBatch);

            //Desenhe o objeto 'sapo'
            sapo.Draw(spriteBatch);
        }

        #endregion
    }
}
